{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# W3_冯炳驹_124298228"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步_2：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#导入库\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrR4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d138209e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 9\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    print(\"best n_estimators: %i\" %(n_estimators))\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    #train_predprob = alg.predict_proba(X_train)\n",
    "    #logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "   # print (\"logloss of train :\" )\n",
    "   # print logloss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [0.8, 1.5, 1.8], 'reg_lambda': [1, 2, 3]}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reg_alpha = [0.8, 1.5, 1.8]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [1,2,3]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=5, random_state=3, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=6, min_child_weight=0.5, missing=None, n_estimators=192,\n",
       "       n_jobs=1, nthread=4, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.8),\n",
       "       fit_params={}, iid=True, n_jobs=4,\n",
       "       param_grid={'reg_alpha': [0.8, 1.5, 1.8], 'reg_lambda': [1, 2, 3]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=192,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=0.5,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        nthread=4,\n",
    "        seed=3)\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=4, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\envs\\python3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:667: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.57956, std: 0.00238, params: {'reg_alpha': 0.8, 'reg_lambda': 1},\n",
       "  mean: -0.57880, std: 0.00198, params: {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  mean: -0.57970, std: 0.00212, params: {'reg_alpha': 0.8, 'reg_lambda': 3},\n",
       "  mean: -0.57952, std: 0.00196, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.57911, std: 0.00201, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.57983, std: 0.00228, params: {'reg_alpha': 1.5, 'reg_lambda': 3},\n",
       "  mean: -0.57980, std: 0.00208, params: {'reg_alpha': 1.8, 'reg_lambda': 1},\n",
       "  mean: -0.57992, std: 0.00178, params: {'reg_alpha': 1.8, 'reg_lambda': 2},\n",
       "  mean: -0.57961, std: 0.00256, params: {'reg_alpha': 1.8, 'reg_lambda': 3}],\n",
       " {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       " -0.57879597078771661)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 154.86458802,  150.53989654,  151.90257082,  149.07011323,\n",
       "         148.73011842,  152.0886529 ,  150.00945215,  147.54363737,\n",
       "         133.24561329]),\n",
       " 'mean_score_time': array([ 0.68132448,  0.73132992,  0.68444901,  0.69818249,  0.6813231 ,\n",
       "         0.69695005,  0.71257691,  0.68444858,  0.612572  ]),\n",
       " 'mean_test_score': array([-0.5795647 , -0.57879597, -0.57969915, -0.57951644, -0.57911495,\n",
       "        -0.57982556, -0.57980185, -0.5799231 , -0.57961425]),\n",
       " 'mean_train_score': array([-0.46955227, -0.47383933, -0.47681994, -0.47333174, -0.47743078,\n",
       "        -0.48002885, -0.47542859, -0.47875501, -0.48122207]),\n",
       " 'param_reg_alpha': masked_array(data = [0.8 0.8 0.8 1.5 1.5 1.5 1.8 1.8 1.8],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [1 2 3 1 2 3 1 2 3],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': ({'reg_alpha': 0.8, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 0.8, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 3},\n",
       "  {'reg_alpha': 1.8, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.8, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 1.8, 'reg_lambda': 3}),\n",
       " 'rank_test_score': array([4, 1, 6, 3, 2, 8, 7, 9, 5]),\n",
       " 'split0_test_score': array([-0.57602789, -0.5754071 , -0.57638978, -0.57642577, -0.57595396,\n",
       "        -0.57696747, -0.57637679, -0.57715107, -0.57522059]),\n",
       " 'split0_train_score': array([-0.47031259, -0.47523708, -0.47841526, -0.47416564, -0.47909207,\n",
       "        -0.48151152, -0.47676393, -0.48025902, -0.48293413]),\n",
       " 'split1_test_score': array([-0.57988542, -0.57909176, -0.58013828, -0.58061023, -0.58011533,\n",
       "        -0.58004932, -0.58003885, -0.58042261, -0.58032776]),\n",
       " 'split1_train_score': array([-0.46809669, -0.47227998, -0.47534698, -0.47211343, -0.47548799,\n",
       "        -0.47890074, -0.47513686, -0.47740228, -0.4797852 ]),\n",
       " 'split2_test_score': array([-0.57943172, -0.57992303, -0.57996408, -0.57903624, -0.57951403,\n",
       "        -0.58124519, -0.58021829, -0.579865  , -0.58032453]),\n",
       " 'split2_train_score': array([-0.47145005, -0.47695979, -0.47825552, -0.47515961, -0.4799173 ,\n",
       "        -0.48286704, -0.47756848, -0.48033155, -0.48252697]),\n",
       " 'split3_test_score': array([-0.58347677, -0.581329  , -0.58297866, -0.58234903, -0.58193393,\n",
       "        -0.58316275, -0.58290656, -0.58269656, -0.58311159]),\n",
       " 'split3_train_score': array([-0.46887026, -0.47235481, -0.47565492, -0.47254575, -0.47466816,\n",
       "        -0.477645  , -0.47312447, -0.47763279, -0.47932295]),\n",
       " 'split4_test_score': array([-0.57900151, -0.57822879, -0.57902476, -0.57916081, -0.57805718,\n",
       "        -0.57770239, -0.57946866, -0.57948011, -0.57908661]),\n",
       " 'split4_train_score': array([-0.46903176, -0.47236497, -0.47642704, -0.47267427, -0.4779884 ,\n",
       "        -0.47921994, -0.47454925, -0.47814943, -0.48154112]),\n",
       " 'std_fit_time': array([  1.8232794 ,   1.63687776,   3.41908582,   1.64323113,\n",
       "          3.03757895,   1.47419173,   3.11918581,   0.74338139,  38.68543473]),\n",
       " 'std_score_time': array([ 0.03217817,  0.05358924,  0.0387842 ,  0.00894872,  0.01875184,\n",
       "         0.02119712,  0.03508176,  0.01822347,  0.06584432]),\n",
       " 'std_test_score': array([ 0.00237709,  0.00197895,  0.00211784,  0.00195604,  0.00201089,\n",
       "         0.00227504,  0.00208385,  0.00177911,  0.0025624 ]),\n",
       " 'std_train_score': array([ 0.00118612,  0.00192354,  0.00128742,  0.00114637,  0.00203274,\n",
       "         0.00189015,  0.00158301,  0.0012809 ,  0.0014427 ])}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.578796 using {'reg_alpha': 0.8, 'reg_lambda': 2}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nxUCPiwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1d14b360a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_lambda' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
